package edu.ynu.se.xiecheng.achitectureclass.common.controller;

import edu.ynu.se.xiecheng.achitectureclass.common.service.DeviceDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

// 标注为一个 Spring REST 控制器，负责处理与设备数据相关的 HTTP 请求
@RestController
@RequestMapping("/api/device-data") // 定义 API 的基础路径
public class DeviceDataController {

    // 自动注入 DeviceDataService 服务层
    @Autowired
    private DeviceDataService deviceDataService;

    /**
     * 处理设备数据的获取和保存请求
     *
     * 1. 请求方法：POST
     * 2. URL: /api/device-data/fetch-and-save
     * 3. 使用 @RequestBody 接收前端发送的 JSON 数据，并将其反序列化为 Map<String, Object>
     *
     * **设计模式：**
     * - **控制器-服务模式 (Controller-Service Pattern)**：
     *   将业务逻辑委托给服务层以保持控制器的职责单一。
     *
     * **设计原则：**
     * - **单一职责原则 (SRP)**：控制器仅负责接收 HTTP 请求和返回响应。
     * - **依赖注入 (DI)**：通过 Spring 的 @Autowired 注解实现服务的注入，便于解耦和测试。
     *
     * @param request 包含 boxNo 和 ids 的请求参数
     * @return 返回设备数据的值列表
     */
    @PostMapping("/fetch-and-save")
    public ResponseEntity<List<Double>> fetchAndSaveDeviceData(@RequestBody Map<String, Object> request) {
        // 从请求中提取 boxNo 和 ids 参数
        String boxNo = (String) request.get("boxNo");
        List<String> ids = (List<String>) request.get("ids");

        // 调用服务层方法获取并保存设备数据
        List<Double> values = deviceDataService.fetchAndSaveDeviceData(boxNo, ids);

        // 返回设备数据值列表作为响应
        return ResponseEntity.ok(values); // 使用 ResponseEntity 符合 RESTful 风格的响应规范
    }
}
